package com.example.mantenimientovehiculo;

import android.app.Dialog;
import android.app.ListActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import com.accesoDatos.BDespecifica;
import com.accesoDatos.BaseDatos;
import com.accesoDatos.BaseDatos.ModosBaseDatos;
import com.example.mantenimientovehiculo.repostaje.*;

public class HistorialRepostage extends ListActivity {

	BaseDatos bd = BDespecifica.baseDatosMantenimiento(this);

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		bd.open(ModosBaseDatos.SoloLecutra);

		String[] campos = new String[] { "*" };
		Cursor c = bd.getDatabase().query("historicorepostar", campos, null,
				null, null, null, "fecha desc, kilometros desc");
		Repostajes todosRepostajes = new Repostajes();
		todosRepostajes.addAllFromCursor(c);
		bd.close();

		AdaptadorRepostaje adaptador = new AdaptadorRepostaje(this,
				todosRepostajes);

		ListView lstOpciones = (ListView) getListView();
		registerForContextMenu(lstOpciones);
		setListAdapter(adaptador);

	}

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		super.onCreateContextMenu(menu, v, menuInfo);

		MenuInflater inflater = getMenuInflater();

		AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
		Repostaje repos = ((AdaptadorRepostaje) getListAdapter())
				.getRepostaje(info.position);
		menu.setHeaderTitle(Repostaje.FormateaFecha(repos.getsFecha()) + " - "
				+ repos.getiKilometros() + "Km");

		inflater.inflate(R.menu.menu_ctx_lista, menu);

	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {

		AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
				.getMenuInfo();
		final AdaptadorRepostaje adaptador = (AdaptadorRepostaje) getListAdapter();
		final Repostaje repos = adaptador.getRepostaje(info.position);

		switch (item.getItemId()) {
		case R.id.CtxLstBorrarRegistro:

			bd.open(ModosBaseDatos.Escritura);
			bd.getDatabase()
					.delete("historicorepostar",
							"id_historicorepostar = "
									+ repos.getId_historicorepostar(), null);
			bd.close();

			adaptador.getTodosRepostajes().remove(repos);
			adaptador.notifyDataSetChanged();
			return true;
		case R.id.CtxLstActualizarRegistro:
			// Creo un dialogo para poder modificar los datos del registro y
			// precargo el formulario con los datos del registro a modificar.
			final Dialog miDialogo = new Dialog(this);
			miDialogo.setContentView(R.layout.modificar_registro);
			miDialogo.setTitle(getString(R.string.btnModificar));
			DatePicker dateP = (DatePicker) miDialogo
					.findViewById(R.id.dpModificarFecha);
			EntradaRegistro.inicializaDatePicker(dateP);
			EditText etKilometros = (EditText) miDialogo
					.findViewById(R.id.etModificarKilometros);
			EditText etLitros = (EditText) miDialogo
					.findViewById(R.id.etModificarLitros);
			EditText etPrecio = (EditText) miDialogo
					.findViewById(R.id.etModificarPrecioLitro);
			CheckBox ckbModificarLlenarDepo = (CheckBox) miDialogo
					.findViewById(R.id.ckbModificarDepositoLleno);
			Button btnModificar = (Button) miDialogo
					.findViewById(R.id.btnModificarEnviar);

			String fechaRecuperada = repos.getsFecha();
			dateP.updateDate(Integer.parseInt(fechaRecuperada.substring(0, 4)),
					Integer.parseInt(fechaRecuperada.substring(4, 6)),
					Integer.parseInt(fechaRecuperada.substring(6)));

			etKilometros.setText(repos.getiKilometros().toString());
			etLitros.setText(repos.getDblLitros().toString());
			etPrecio.setText(repos.getDblPrecio().toString());
			ckbModificarLlenarDepo.setChecked(repos.getbDepositoLleno());

			btnModificar.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) { // Recupero los datos del
												// formulario, y los guardo en
												// la BD. despues, actualizo el
												// adaptador.
					// TODO Apendice de metodo generado automaticamente
					DatePicker datePick = (DatePicker) miDialogo
							.findViewById(R.id.dpModificarFecha);
					String fecha = Repostaje.recuperaFecha(datePick);
					String kilometros = ((EditText) miDialogo
							.findViewById(R.id.etModificarKilometros))
							.getText().toString();
					String litros = ((EditText) miDialogo
							.findViewById(R.id.etModificarLitros)).getText()
							.toString();
					String precio = ((EditText) miDialogo
							.findViewById(R.id.etModificarPrecioLitro))
							.getText().toString();

					Boolean bDepoLleno = ((CheckBox) miDialogo
							.findViewById(R.id.ckbModificarDepositoLleno))
							.isChecked();
					Integer iCheckedDepoLleno = 0;
					if (bDepoLleno) {
						iCheckedDepoLleno = 1;
					}

					bd.open(ModosBaseDatos.Escritura);
					ContentValues values = new ContentValues();
					values.put("fecha", fecha);
					values.put("kilometros", Integer.parseInt(kilometros));
					values.put("litros", Double.parseDouble(litros));
					values.put("preciolitro", Double.parseDouble(precio));
					values.put("deposito_lleno", iCheckedDepoLleno);
					bd.getDatabase().update(
							"historicorepostar",
							values,
							"id_historicorepostar = "
									+ repos.getId_historicorepostar(), null);
					bd.close();
					Toast.makeText(getBaseContext(),
							getString(R.string.strGuardadoOk),
							Toast.LENGTH_LONG).show();

					repos.setsFecha(fecha);
					repos.setiKilometros(Integer.parseInt(kilometros));
					repos.setDblLitros(Double.parseDouble(litros));
					repos.setDblPrecio(Double.parseDouble(precio));
					repos.setbDepositoLleno(bDepoLleno);
					adaptador.notifyDataSetChanged();

					miDialogo.dismiss();
				}
			});

			miDialogo.show();

			// Intent popUpModificar = new
			// Intent(this,DialogEntradaRegistro.class);
			// popUpModificar.putExtra("id_historicorepostar",
			// repos.getId_historicorepostar());
			// startActivity(popUpModificar);
			return true;
		default:
			return super.onContextItemSelected(item);
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		// getMenuInflater().inflate(R.menu.historial_repostage, menu);
		return false;
	}

	@Override
	public void onDestroy() {
		if (bd.getDatabase().isOpen()) {
			bd.close();
		}
		bd = null;
		super.onDestroy();
	}
}
